﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FrameworkLib.Facades;
using GestionePolveri2.DAL;
using GestionePolveriLib.BL;

namespace GestionePolveriLib.Facades
{
    public class TipologiaSMPFacade : FacadeBase<GestionePolveriEntities>
    {
        public TipologiaSMPFacade()
        {

        }

        public void LoadAsync(BackgroundWorkerCallbackBase.Callback callback)
        {
            this.RunAsync(() => GetTipologie(), callback);
        }

        public List<TipologiaScortaMinima> GetTipologie()
        {
            List<TipologiaScortaMinima> retValue = null;

            try
            {
                var obj = from x in this.GetContext().TipologieScortaMinimaPolvere
                          select new TipologiaScortaMinima
                          {
                              ID = x.IDTipologiaScortaMinimaPolvere,
                              Codice = x.Codice,
                              Descrizione = x.Descrizione
                          };

                if (obj.Any())
                {
                    retValue = obj.ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }

        public List<TipologiaScortaMinima> Get()
        {
            List<TipologiaScortaMinima> retValue = null;

            try
            {
                var obj = from x in this.GetContext().TipologieScortaMinimaPolvere
                          select new TipologiaScortaMinima
                          {
                              ID = x.IDTipologiaScortaMinimaPolvere,
                              Codice = x.Codice,
                              Descrizione = x.Descrizione
                          };

                if (obj.Any())
                {
                    retValue = obj.ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }

        public static TipologiaScortaMinima Get(short id)
        {
            TipologiaScortaMinima retValue = null;

            try
            {
                using (GestionePolveriEntities ctx = new GestionePolveriEntities())
                {
                    var obj = from x in ctx.TipologieScortaMinimaPolvere
                              where x.IDTipologiaScortaMinimaPolvere == id
                              select new TipologiaScortaMinima
                              {
                                  ID = x.IDTipologiaScortaMinimaPolvere,
                                  Codice = x.Codice,
                                  Descrizione = x.Descrizione
                              };

                    if (obj.Any())
                    {
                        retValue = obj.FirstOrDefault();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }

        public TipologiaScortaMinima Get(string codice)
        {
            TipologiaScortaMinima retValue = null;

            try
            {
                using (GestionePolveriEntities ctx = new GestionePolveriEntities())
                {
                    var obj = from x in ctx.TipologieScortaMinimaPolvere
                              where x.Codice == codice
                              select new TipologiaScortaMinima
                              {
                                  ID = x.IDTipologiaScortaMinimaPolvere,
                                  Codice = x.Codice,
                                  Descrizione = x.Descrizione
                              };

                    if (obj.Any())
                    {
                        retValue = obj.FirstOrDefault();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }

        public bool Add(TipologiaScortaMinima data)
        {
            bool retValue = false;

            try
            {
                TipologieScortaMinimaPolvere tsmp = new TipologieScortaMinimaPolvere();
                tsmp.Codice = data.Codice;
                tsmp.Descrizione = data.Descrizione;

                this.GetContext().TipologieScortaMinimaPolvere.AddObject(tsmp);
                this.GetContext().SaveChanges();

                retValue = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }

        public bool Modify(TipologiaScortaMinima data)
        {
            bool retValue = false;

            try
            {
                var objs = from x in this.GetContext().TipologieScortaMinimaPolvere where x.IDTipologiaScortaMinimaPolvere == data.ID select x;

                if (objs.Any())
                {
                    TipologieScortaMinimaPolvere obj = objs.FirstOrDefault();
                    obj.Codice = data.Codice;
                    obj.Descrizione = data.Descrizione;

                    this.GetContext().SaveChanges();

                    retValue = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }

        public bool Delete(TipologiaScortaMinima data)
        {
            bool retValue = false;

            try
            {
                var objs = from x in this.GetContext().TipologieScortaMinimaPolvere where x.IDTipologiaScortaMinimaPolvere == data.ID select x;

                if (objs.Any())
                {
                    TipologieScortaMinimaPolvere tsmp = objs.FirstOrDefault();
                    if (tsmp.AnagPolveri.Count > 0)
                    {
                        retValue = false;
                    }
                    else
                    {
                        this.GetContext().DeleteObject(objs.FirstOrDefault());
                        this.GetContext().SaveChanges();

                        retValue = true;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retValue;
        }
    }
}
